﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using sgp.Models;

namespace sgp.Controllers
{
    public class DoacaoController : Controller
    {
        private DbParoquia db = new DbParoquia();

        //
        // GET: /Doacao/

        public ViewResult Index(int? formaDoacaoId)
        {
            ViewBag.FormasDoacao = db.FormasDoacao;
            ViewBag.Setores = db.Setores;
            

            ViewBag.Pessoas = ObtemListaDePessoas();
            if (formaDoacaoId == null)
            {
                return View(db.Doacoes.Include("FormaDoacao"));
            }
            else
            {
                return View(db.Doacoes.Where(l => l.FormaDoacao.Id == formaDoacaoId).Include("FormaDoacao"));
            }

            //return View(db.Doacoes.ToList());
        }

        private List<Pessoa> ObtemListaDePessoas()
        {
            List<Pessoa> pessoas = new List<Pessoa>();

            foreach (var pessoa in db.PessoaFisica)
            {
                pessoas.Add(pessoa);
            }

            foreach (var pessoa in db.PessoaJuridica)
            {
                pessoas.Add(pessoa);
            }
            return pessoas;
        }

        //
        // GET: /Doacao/Details/5

        public ViewResult Details(long id)
        {
            Doacao doacao = db.Doacoes.Include("FormaDoacao").Include("Pessoa").Where(p => p.Id == id).Single();
            return View(doacao);

            //Doacao doacao = db.Doacoes.Find(id);
            //return View(doacao);
        }

        //
        // GET: /Doacao/Create

        public ActionResult Create()
        {

            ViewBag.FormasDoacao = db.FormasDoacao.ToList();
            ViewBag.Pessoas = ObtemListaDePessoas();
            ViewBag.Setores = db.Setores.ToList();
            Doacao dc = new Doacao();
            Pessoa pes = new Pessoa();
            Setor set = new Setor();


            return View();
        }

        //
        // POST: /Doacao/Create

        [HttpPost]
        public ActionResult Create(Doacao doacao)
        {
            if (db.PessoaFisica.Find(doacao.Pessoa.Id) != null)
                doacao.Pessoa = db.PessoaFisica.Find(doacao.Pessoa.Id);
            else if (db.PessoaJuridica.Find(doacao.Pessoa.Id) != null)
                doacao.Pessoa = db.PessoaJuridica.Find(doacao.Pessoa.Id);

            doacao.FormaDoacao = db.FormasDoacao.Find(doacao.FormaDoacao.Id);
            doacao.Setor = db.Setores.Find(doacao.Setor.Id);

            if (ModelState.IsValid)
            {
                db.Doacoes.Add(doacao);                
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            

            return View(doacao);
        }

        //
        // GET: /Doacao/Edit/5

        public ActionResult Edit(long id)
        {
            ViewBag.FormasDoacao = db.FormasDoacao.ToList();

            Doacao doacao = db.Doacoes.Include("FormaDoacao").Where(p => p.Id == id).Single();
            return View(doacao);

            //Doacao doacao = db.Doacoes.Find(id);
            //return View(doacao);
        }

        //
        // POST: /Doacao/Edit/5

        [HttpPost]
        public ActionResult Edit(Doacao doacao)
        {
            Doacao doacaoEditada = db.Doacoes.Find(doacao.Id);
            doacaoEditada.FormaDoacao = db.FormasDoacao.Find(doacao.FormaDoacao.Id);
            doacaoEditada.Data = doacao.Data;
            doacaoEditada.Valor = doacao.Valor;

            db.Entry(doacaoEditada).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");



            //if (ModelState.IsValid)
            //{
            //    db.Entry(doacao).State = EntityState.Modified;
            //    db.SaveChanges();
            //    return RedirectToAction("Index");
            //}
            //return View(doacao);
        }

        //
        // GET: /Doacao/Delete/5

        public ActionResult Delete(long id)
        {
            Doacao doacao = db.Doacoes.Include("FormaDoacao").Include("Pessoa").Where(p => p.Id == id).Single();
            return View(doacao);
        }

        //
        // POST: /Doacao/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(long id)
        {
            Doacao doacao = db.Doacoes.Find(id);
            db.Doacoes.Remove(doacao);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}